#include <stdio.h>
#include <stdlib.h>

int* plusOne(int* digits, int digitsSize, int* returnSize)
{
    int * nums = malloc(sizeof(int)*digitsSize);
    int n = 0;
    if(*digits == 9 && digitsSize == 1)
    {
        nums[n++] = 0;
        nums[n++] = 1;
        *returnSize = n;
        return nums;
    }
    if((digits[digitsSize - 1] += 1) == 10)
    {
         nums[n++] = 0;
        digits[digitsSize - 2] += 1;
        for(int i = digitsSize - 2;i >= 0;i--)
        {
            if(digits[i] == 10)
            {
                digits[i] = 0;
                digits[i-1] +=1;
                nums[n++] = digits[i];
            }
            else
            {
                nums[n++] = digits[i];
            }
        }
    }
    else
    {
        nums[n++] = digits[digitsSize - 1];
        for(int i = digitsSize - 2;i >= 0;i--)
            nums[n++] = digits[i];
    }
    *returnSize = n;
    return nums;

}

int main()
{
    int digits[] = {1,2,3,9,9};
    int digitsSize = sizeof(digits)/sizeof(digits[0]);
    int returnSize = 0;
    int * p = plusOne(digits,digitsSize, &returnSize);
    for(int i = returnSize - 1;i >= 0;i--)
    {
        printf("%d ",p[i]);
    }
    printf("\n");
    free(p);
    p = NULL;
    return 0;
}